Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
¿Cómo reaccionar a los cambios de ruta en Vue 3, API de composición de "configuración de script"?

Este es un ejemplo de rutas que tengo en mi aplicación:

 { path: "/something", name: "SomeRoute", component: SomeComponent, meta: {showExtra: true}, }, { path: "/somethingElse", name: "SomeOtherRoute", component: SomeOtherComponent, },

Luego tengo el siguiente componente, que como notará tiene dos etiquetas de script , una con API de composición y otra sin:

 <template> <div> This will always be visible. Also here's a number: {{ number }} </div> <div v-if="showExtra"> This will be hidden in some routes. </div> </template> <script setup lang="ts"> import type { RouteLocationNormalized } from "vue-router" import { ref } from "vue" const number = 5 const showExtra = ref(true) const onRouteChange = (to: RouteLocationNormalized) => { showExtra.value = !!to.meta?.showExtra } </script> <script lang="ts"> import { defineComponent } from "vue" export default defineComponent({ watch: { $route: { handler: "onRouteChange", flush: "pre", immediate: true, deep: true, }, }, }) </script>

Esto funciona correctamente: cuando ingreso una ruta con meta: {showExtra: false} oculta el div adicional, de lo contrario, lo muestra.

Sin embargo, lo que quiero hacer es lograr lo mismo usando solo la API de composición, en otras palabras, eliminando la segunda etiqueta <script> por completo. He intentado esto:

 <script setup lang="ts"> import type { RouteLocationNormalized } from "vue-router" import { ref } from "vue" import { onBeforeRouteUpdate } from "vue-router" // ... // same as before // ... onBeforeRouteUpdate(onRouteChange) </script>

Pero esto no tendrá el efecto esperado cuando cambie de ruta. Soy consciente de la función de watch que podría importar, pero no estoy seguro de cómo obtener la metainformación sobre la ruta y cómo apaciguar al verificador de tipos.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede convertir su observador en una API de composición importando el método de watch desde vue

 <script lang="ts"> import { defineComponent, vue } from "vue" import { useRoute } from "vuex" export default defineComponent({ setup() { const route = useRoute() watch(route, (to) => { showExtra.value = !!to.meta?.showExtra }, {flush: 'pre', immediate: true, deep: true}) }, }) </script>
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda